/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.gbvbahia.usuarios.beans.exceptions;

import javax.ejb.ApplicationException;

/**
 * Classe que representa um erros de negócio, quando algo não estiver da forma
 * que se espera o método do bean EJB irá lançar
 * essa exceção com seus atributos informando o que está incorreto.
 * @author Guilherme
 */
@ApplicationException(rollback = true)
public class UsuarioNegocioException extends Exception {
    
    /**
     * Atributo que recebe um código inputado pelo desenvolvedor que deve mapear
     * uma frase ou varias frases no resouce bundle da aplicação.<br>
     * Será um código que pode ser visto no arquivo
     * codigos_execoes.properties dentro deste mesmo pacote.
     * Argumento obrigatório para instanciação da classe.
     */
    private String message;
    /**
     * Algumas informações são dinâmicas e devem ser inseridas neste Array
     * de String, o que estiver entre chaves {0} {1} {2} será substituído de
     * acordo com a posição no Array.<br>
     * Argumento opcional para instanciação da classe.
     */
    private String[] variacoes;

    /**
     * Construtor que recebe somente a mensagem como argumento, 
     * não são necessários variações.
     * @param message será um código que pode ser visto no arquivo
     * codigos_execoes.properties dentro deste mesmo pacote.
     */
    public UsuarioNegocioException(String message) {
        this.message = message;
    }

    /**
     * Construtor que recebe a mensagem e as variações.
     * @param message será um código que pode ser visto no arquivo
     * codigos_execoes.properties dentro deste mesmo pacote.
     * @param variacoes Informações que são definidas dinamicamente.
     */
    public UsuarioNegocioException(String message, String[] variacoes) {
        super();
        this.message = message;
        this.variacoes = variacoes;
    }

    @Override
    public String getMessage() {
        return message;
    }

    /**
     * Caso seja necessário alterar a mensagem passada como argumento
     * no construtor.
     * @param message será um código que pode ser visto no arquivo
     * codigos_execoes.properties dentro deste mesmo pacote.
     */
    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * 
     * @return Array de String com as variações ou nulo se não houver.
     */
    public String[] getVariacoes() {
        return variacoes;
    }

    /**
     * Define ou altera as variações.
     * @param variacoes Informações defiidas dinamicamente.
     */
    public void setVariacoes(String[] variacoes) {
        this.variacoes = variacoes;
    }
}
